//
// Created by zx208 on 2024/10/29.
//

#include "LinkedStack_BinaryTree.h"

// 使用先序遍历创建二叉树
void Create_BiTree_Pre(BiTree *T){
    char e;
    scanf(" %c", &e);
    if(e == '#') *T = NULL;
    else {
        *T = (BiTree) malloc(sizeof(  BiNode));
        (*T)->data = e;
        Create_BiTree_Pre(&(*T)->lchild);
        Create_BiTree_Pre(&(*T)->rchild);
    }
}

// 三大遍历
// 递归写法
// 中序遍历 左根右
void InOrder(BiTree T) {
    if (!T) return;
    InOrder(T->lchild);
    printf("%c ", T->data);
    InOrder(T->rchild);
}

// 先序遍历 根左右
void PreOrder(BiTree T) {
    if (!T) return;
    printf("%c ", T->data);
    PreOrder(T->lchild);
    PreOrder(T->rchild);
}

// 后序遍历 左右根
void PostOrder(BiTree T) {
    if (!T) return;
    PostOrder(T->lchild);
    PostOrder(T->rchild);
    printf("%c ", T->data);
}

int main(void){
    BiTree T = NULL;
    Create_BiTree_Pre(&T);
    PreOrder(T);
    printf("\n");
    InOrder(T);
    printf("\n");
    PostOrder(T);
    return 0;
}

// CDNK##J##BZ###FL##M##